<?php

namespace app\common\controller;

use think\Controller;

class Home extends Controller
{
    /*
     不需要登录的方法 如果有不需要验证登录的方法 就把方法名写进去
     如果所有的方法都不用登录 就给*
    **/
    public $NoLogin = [];

    // 继承底层的控制器
    public function __construct()
    {
        parent::__construct();

        //公共区域加载模型
        $this->BusinessModel = model('Business.Business');

        //登录的判断验证
        // var_dump($this->NoLogin);
        // exit;

        //获取当前访问的控制器方法名

        //返回当前的模块，控制器，方法
        // var_dump($this->request->module());
        // var_dump($this->request->controller());
        // var_dump($this->request->action());
        // echo $this->request->action();

        // 获取当前访问控制器的方法
        $action = $this->request->action();

        // 判断方法与登录的变量是否相等，如果相等就不需要登录，如果不相等就需要登录
        // in_array 判断一个值在不在数组中如果在就返回true否则false
        if (!in_array($action, $this->NoLogin) && !in_array('*', $this->NoLogin)) {
            //如果在里面说明，不需要登录
            //如果不在就说明要登录
            $this->auth();
        }
    }

    /**
     * 验证是否登录
     * @param $redirect true 会跳转 false不会跳转
     * @return 返回用户信息
     */
    public function auth($redirect = true)
    {
        // 1.获取到cookie中的值
        $cookie = cookie('business');

        // 2.取出id和mobile的值
        $id = isset($cookie['id']) ? trim($cookie['id']) : '';
        $mobile = isset($cookie['mobile']) ? trim($cookie['mobile']) : '';

        // 3.查询用户是否存在
        $where = ['id' => $id, 'mobile' => $mobile];
        $business = $this->BusinessModel->where($where)->find();

        // 4.判断如果不存在
        if (!$business) {
            // 没找到用户 cookie是伪造的 所以要删除
            cookie('business', null);

            // 跳转
            if ($redirect) {
                $this->error('非法访问，请重新登录！', url('home/index/login'));
                exit;
            } else {
                return;
            }
        }

        // 5.判断如果存在，如果要是找到了用户信息，那么我们要渲染数据
        if ($redirect) {
            // 进行模板赋值，将数据存放进入这个business里面，然后Business这个控制器渲染拿到数据，就可以直接使用到html页面上
            $this->view->assign('business', $business);
        }

        // 6.返回用户数据信息
        return $business;
    }
}
